Skip to content

Support call xmake from msbuild#472

Merged
waruqi merged 12 commits intoxmake-io:devfrom
OpportunityLiu:vsproj
Jul 15, 2019
Merged

Support call xmake from msbuild#472
waruqi merged 12 commits intoxmake-io:devfrom
OpportunityLiu:vsproj

Conversation

@OpportunityLiu
Copy link
Copy Markdown
Member

@OpportunityLiu OpportunityLiu commented Jul 1, 2019

Ref: #257 #174


│  xmake.lua
├─.xmake            
├─build
├─src
│  │  
│  ├─demo
│  │  │  xmake.lua
│  │  └─ ...
│  ├─lcurses    
│  │  │  xmake.lua
│  │  └─ ...
│  ├─luajit
│  │  │  xmake.lua
│  │  └─ ...
│  ├─pdcurses
│  │  │  xmake.lua
│  │  └─ ...
│  ├─tbox
│  │  │  xmake.lua
│  │  └─ ...           
│  └─xmake
│     │  xmake.lua
│     └─ ...    
└─vsxmake
    │  vsxmake.sln
    │  Xmake.Custom.props
    │  Xmake.Custom.targets
    │      
    ├─demo
    │      demo.vcxproj
    │      demo.vcxproj.filters
    │      demo.vcxproj.user
    │      Xmake.Custom.props
    │      Xmake.Custom.targets
    │      
    ├─lcurses
    │      lcurses.vcxproj
    │      lcurses.vcxproj.filters
    │      lcurses.vcxproj.user
    │      Xmake.Custom.props
    │      Xmake.Custom.targets
    │      
    ├─luajit
    │      luajit.vcxproj
    │      luajit.vcxproj.filters
    │      luajit.vcxproj.user
    │      Xmake.Custom.props
    │      Xmake.Custom.targets
    │      
    ├─pdcurses
    │      pdcurses.vcxproj
    │      pdcurses.vcxproj.filters
    │      pdcurses.vcxproj.user
    │      Xmake.Custom.props
    │      Xmake.Custom.targets
    │      
    ├─sv
    │      sv.vcxproj
    │      sv.vcxproj.filters
    │      sv.vcxproj.user
    │      Xmake.Custom.props
    │      Xmake.Custom.targets
    │      
    ├─tbox
    │      tbox.vcxproj
    │      tbox.vcxproj.filters
    │      tbox.vcxproj.user
    │      Xmake.Custom.props
    │      Xmake.Custom.targets
    │      
    └─xmake
            Xmake.Custom.props
            Xmake.Custom.targets
            xmake.vcxproj
            xmake.vcxproj.filters
            xmake.vcxproj.user

@OpportunityLiu
Copy link
Copy Markdown
Member Author

从dev重新起头有点麻烦,就先包含utf8分支的内容了,完了那个merge进去这里再rebase

@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 1, 2019

如果只是改动vcproj的插件部分,应该跟 utf8的 比较独立吧。。为什么不基于dev来搞呢。一些utf8的特性 可以暂时不用进去。

utf8那个 你一次改动太多文件了,光review一遍都要好久,估计得等上一会了。。

@OpportunityLiu
Copy link
Copy Markdown
Member Author

只是懒。。。

我的CUDA项目已经可以用这一套编译了,intelliscene、调试、报错、定义跳转都没啥问题。

不知道qt项目有啥额外的复杂度?

@OpportunityLiu
Copy link
Copy Markdown
Member Author

话说xmake clean的all选项是干啥的?vs的清理流程需不需要加这个?

@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 1, 2019

只是懒。。。

我的CUDA项目已经可以用这一套编译了,intelliscene、调试、报错、定义跳转都没啥问题。

不知道qt项目有啥额外的复杂度?

那就只能慢慢等我review完utf8那个再说吧,qt里面主要就是对.qrc/.ui/.moc等特定规则的处理,其他到没什么。

@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 1, 2019

话说xmake clean的all选项是干啥的?vs的清理流程需不需要加这个?

加上all,会清理掉build下xmake生成的所有文件,包括生成的target文件,比如库文件等,会清理的比较干净些,包括各种子目录

不加all,仅仅清理一些build下生成的临时文件,比如objs, deps

@OpportunityLiu
Copy link
Copy Markdown
Member Author

说实话,这套的工程定义本身简单到都可以用configfile那套模板系统生成了

@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 1, 2019

说实话,这套的工程定义本身简单到都可以用configfile那套模板系统生成了

那就更没必要放置在utf8上去提交了,这样不方便merge

@OpportunityLiu

This comment has been minimized.

@OpportunityLiu
Copy link
Copy Markdown
Member Author

@waruqi target:scriptdir()project.directory() 区别是啥?

@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 3, 2019

@waruqi target:scriptdir()project.directory() 区别是啥?

当前target定义所在的xmake.lua目录,有可能是子路径。。project.directory()是项目根目录

@OpportunityLiu
Copy link
Copy Markdown
Member Author

当前target定义所在的xmake.lua目录,有可能是子路径。。project.directory()是项目根目录

所以xmake -P应该给后者,而 xmake -F给前者?

@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 3, 2019

当前target定义所在的xmake.lua目录,有可能是子路径。。project.directory()是项目根目录

所以xmake -P应该给后者,而 xmake -F给前者?

不是这意思, -P指定的项目根目录(默认加载xmake.lua),-F指定的是项目根目录下的xmake.lua文件,你可以指定加载 其他名字lua文件,反正都是项目根目录的那个 lua描述文件。。

而target:scriptdir 用于在自定义脚本中获取这个target实际定义所在的xmake.lua路径。

比如:

src/xmake.lua

target("test")
    on_run("xxx.yyy")

这个时候加载 src/xxx/yyy.lua 作为运行脚本,在这个脚本里面 想要获取 到 src/xmake.lua 这个路径,就可以通过target:scriptdir来获取。

src/xxx/yyy.lua

function main(target)
    print(target:scriptdir())
end

所以target:scriptdir()这个接口不常用,除非你在任意自定义脚本中,都想获取对应target所在上层xmake.lua的文件位置,才会调用下。。

而 -P/-F 都是用来影响 project.directory的。只是一个指定目录加载默认xmake.lua文件名,另一个指定文件,用户可以去其他非xmake.lua的名字来加载。。

projectdir
- xmake.lua
- src
  - xmake.lua
    - xxx
       - yyy.lua

@OpportunityLiu
Copy link
Copy Markdown
Member Author

OpportunityLiu commented Jul 3, 2019

解决方案和工程生成已经弄完了,可以试试
@orzuk-lmj @waruqi

xmake update utf8
xmake update -s github:OpportunityLiu/xmake#vsproj
xmake project -k vsxmake2019

第一个问题,已经指定 -P 还报这个warning,很烦人。
图片
第二个,VS会并行生成所有项目,有时候xmake会炸,最典型的就是检测flags的时候
图片

Comment thread xmake/plugins/project/vsxmake/getinfo.lua
Comment thread xmake/plugins/project/vsxmake/getinfo.lua Outdated
Comment thread xmake/plugins/project/vsxmake/getinfo.lua Outdated
Comment thread xmake/plugins/project/vsxmake/getinfo.lua Outdated
Comment thread xmake/plugins/project/vsxmake/getinfo.lua
@OpportunityLiu
Copy link
Copy Markdown
Member Author

OpportunityLiu commented Jul 4, 2019

比起这些,继承下来的includedir和linkdir从哪取? @waruqi

@orzuk-lmj
Copy link
Copy Markdown
Contributor

orzuk-lmj commented Jul 4, 2019

我抓了 OpportunityLiu 提供的fork 最新 d0e69b7eff124aec1f51553593465d68dfa9fb39 編譯的時候出現以下錯誤:

[ 14%]: inserting.release src\luajit\autogen\windows\jit\x64\lj_vm.obj
cp src\luajit\autogen\windows\jit\x64\lj_vm.obj build\.objs\luajit\windows\x64\release\src\luajit\autogen\windows\jit\x64\lj_vm.obj.obj
error: C:\software\OpportunityLiu\xmake/core/base/os.lua:715: C:\software\OpportunityLiu\xmake/core/base/os.lua:715: 
C:\software\OpportunityLiu\xmake/core/base/table.lua:54: bad argument #1 to 'insert' (table expected, got nil)
stack traceback:
        [C]: in function 'insert'
        C:\software\OpportunityLiu\xmake/core/base/table.lua:54: in function 'join2'
        C:\software\OpportunityLiu\xmake/core/tool/builder.lua:269: in function '_add_flags_from_flagkind'
        C:\software\OpportunityLiu\xmake/core/tool/builder.lua:283: in function '_add_flags_from_option'
        C:\software\OpportunityLiu\xmake/core/tool/builder.lua:320: in function '_add_flags_from_target'
        C:\software\OpportunityLiu\xmake/core/tool/compiler.lua:286: in function 'compflags'
        ...are\OpportunityLiu\xmake\actions\build\kinds\object.lua:106: in function '_do_build_file'
        ...are\OpportunityLiu\xmake\actions\build\kinds\object.lua:174: in function '_build_object'
        ...are\OpportunityLiu\xmake\actions\build\kinds\object.lua:196: in function <...are\OpportunityLiu\xmake\actions\build\kinds\object.lua:190>

直接使用 v2.2.7 binary,然後跟以往編譯方式一樣直接進入路徑後直接xmake,我有漏掉什麼嗎??

  • 使用v2.2.7 成功編譯出dev分支執行檔 : 最新的 db0b2ae
  • 用這個dev執行檔再次編譯 utf8分支的時候報錯 789e43d
  • 用這個dev執行檔再次編譯 fork的時候也報錯 OpportunityLiu d0e69b7

@OpportunityLiu
Copy link
Copy Markdown
Member Author

@orzuk-lmj 按这个来

xmake update utf8
xmake update -s github:OpportunityLiu/xmake#vsproj
xmake project -k vsxmake2019

要用UTF8那个分支的binary

或者从这里装一个
https://ci.appveyor.com/project/waruqi/xmake/builds/25695634

@OpportunityLiu
Copy link
Copy Markdown
Member Author

@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 4, 2019

比起这些,继承下来的includedir和linkdir从哪取? @waruqi

从deps里取,看下这块:

function builder:_inherit_values_from_targetdeps(values, target, name)
local orderdeps = target:orderdeps()
local total = #orderdeps
for idx, _ in ipairs(orderdeps) do
local dep = orderdeps[total + 1 - idx]
local depinherit = target:extraconf("deps", dep:name(), "inherit")
if depinherit == nil or depinherit then
table.join2(values, dep:get(name, {interface = true}))
end
end
end

@OpportunityLiu
Copy link
Copy Markdown
Member Author

for idx, _ in ipairs(orderdeps) do 
    local dep = orderdeps[total + 1 - idx] 

这啥意思?为啥不直接取值?

@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 4, 2019

for idx, _ in ipairs(orderdeps) do 
    local dep = orderdeps[total + 1 - idx] 

这啥意思?为啥不直接取值?

根据用户 add_deps("dep1", "dep2", "dep3") 添加的顺序保持一致,linkdirs links includedirs这种 都是顺序敏感的。。

target("c")
target("b")
    add_deps("c")
target("a")
    add_deps("b")

        -- a.deps = b
        -- b.deps = c
        --
        -- orderdeps: c -> b -> a

默认的orderdeps依赖链顺序,会优先去 最底层dep,这种一般用于target的构建顺序依赖,优先构建最底层dep target (c)

而 links, includedirs这种是反向的,a -> b -> c,也就是 -la -lb -lc

@OpportunityLiu
Copy link
Copy Markdown
Member Author

OpportunityLiu commented Jul 4, 2019

... 那为啥不直接

    for idx = total,1,-1 do
        local dep = orderdeps[idx]

看得我心好累

@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 4, 2019

... 那为啥不直接

    for idx = total,1,-1 do
        local dep = orderdeps[idx]

看得我心好累

都可以啊,这个就不要纠结了 你要是觉得之前的不简洁,可以帮忙改进下。。

Comment thread scripts/installer.nsi Outdated
Unicode true

; Use best compressor
SetCompressor /FINAL /SOLID lzma
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Comment thread xmake/plugins/project/vsxmake/getinfo.lua Outdated
@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 15, 2019

vs2019上测了下,可能改成pushd后,清项目文件的问题没有了。。warning那个之前也修复了,但是build输出目录有点问题。。

vs2019默认的working dir是 projectdir/vsxmake,所以通过pushd修改xmake的执行环境后虽然大部分操作都ok,但是build的配置还是基于projectdir/vsxmake配置的。。所以实际build输出到了 projectdir外面,跟projectdir平级了。。

build
projectdir
  - xmake.lua
  - src
  - vsxmake2019
$xmake config -P . -p windows -m debug -a x64 -o "..\build" test2  -----> 此处的build目录配置。。
checking for the Microsoft Visual Studio (x64) version ... 2019
checking for the Cuda SDK directory ... no
$xmake build -P . -w test2
[  0%]: compiling.debug src\main.c
[100%]: linking.debug test2.exe

@OpportunityLiu
Copy link
Copy Markdown
Member Author

OpportunityLiu commented Jul 15, 2019

build输出目录有点问题。。

你生成vsxproj的时候怎么配置的?我这里也是vs2019

xmake f -o ../build
xmake project -k vsxmake2019

如果这么搞过那vs生成的时候肯定也是同样的方法配置输出目录

@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 15, 2019

build输出目录有点问题。。

你生成vsxproj的时候怎么配置的?我这里也是vs2019

xmake f -o ../build
xmake project -k vsxmake2019

如果这么搞过那vs生成的时候肯定也是同样的方法配置输出目录

我就直接通过create创建了一个空工程,执行的生成

xmake create test
cd test
xmake project -k vsxmake2019

@OpportunityLiu
Copy link
Copy Markdown
Member Author

没问题啊?
图片

@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 15, 2019

可以了,我用了后面几个commit的包是可以的。。

Comment thread xmake/plugins/project/vsxmake/vsproj/Xmake.props
@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 15, 2019

我这看没什么大问题了 那我先merge了?

@OpportunityLiu
Copy link
Copy Markdown
Member Author

qt的项目你测了吗?

@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 15, 2019

qt的项目你测了吗?

我测了下,编译和intelliscene等都没啥问题。就是调试运行 加载失败。。因为需要设置qt bin目录到path下才能正常加载运行。。

我刚改进下qt rules到dev,通过add_runenvs来替代 before_run 来设置path, 测了下调试运行应该也ok了。。

Snip20190715_1

@OpportunityLiu
Copy link
Copy Markdown
Member Author

就这样吧,试了下 before_run啥的确实一点办法没有

@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 15, 2019

既然做了config check切换,和 generate_configheaders, 那 genertate_configfiles那个也加一下吧

@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 15, 2019

就这样吧,试了下 before_run啥的确实一点办法没有

这个倒还好,我改下rule,已经解决了,基本上需要在before_run里面处理的东西,通过add_runenvs和add_rundirs基本上都能处理了。。倒也不是太大的问题。。

@OpportunityLiu
Copy link
Copy Markdown
Member Author

行了

@waruqi waruqi merged commit 861733b into xmake-io:dev Jul 15, 2019
@OpportunityLiu OpportunityLiu deleted the vsproj branch July 15, 2019 13:15
@OpportunityLiu
Copy link
Copy Markdown
Member Author

OpportunityLiu commented Jul 15, 2019

function 被wrap进一个table了

图片

@waruqi
Copy link
Copy Markdown
Member

waruqi commented Jul 15, 2019

这个不是这里的问题 之前改interpreter改出来的bug 我刚修了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants